# coding: utf-8
# 多线程


import time
import sys
import threading
from blocking_io import doRequest


def main():
    start = time.time()
    threads = []
    for i in range(int(sys.argv[1])):
        # doRequest
        threads.append(threading.Thread(target=doRequest, args=()))
    for i in threads:
        i.start()
    for i in threads:
        i.join()

    print("spend time : %s" % (time.time() - start))


if __name__ == "__main__":
    main()

"""
>>> python concurrent.py 100
spend time : 0.2520101070404053
速度明显快了很多，几乎是刚才的10倍了。

但是python的线程是有问题的，因为一个python进程中，同一时刻只允许一个线程运行，正在执行的线程会获取到GPL。做阻塞的系统调用时，例如sock.connect(),sock.recv()时，当前线程会释放GIL，让别的线程有机会获取GPL，然后执行。但是这种获取GPL的调度策略是抢占式的，以保证同等优先级的线程都有均等的执行机会，那带来的问题是：并不知道下一时刻是哪个线程被运行，也不知道它正要执行的代码是什么。所以就可能存在竞态条件。这种竞争有可能使某些线程处于劣势，导致一直获取不到GIL
"""








